package com.cskaoyan.javase._2inner._5anonymous._1basic;

/**
 * 匿名内部类语法:
 * new 类名或者接口名(){
 *   // 某类名或接口名的子类的类体
 * };
 *
 * 匿名内部类的自身特点
 * 1.匿名子类的类体中能够定义什么成员呢?
 *      和局部内部类是一样的,没有静态声明
 *
 * 2.匿名内部类的语法中的"()"有没有作用?
 *      有用
 *      是给匿名子类的父类构造器传参的
 *      就是语法结构中"类名"的构造器
 *
 *      但是接口是没有构造器的
 *      如果创建接口的子类对象,那么"()"就是单纯语法结构,没有任何用,但是也不能省略.
 *
 * 3.匿名内部类有没有构造器?
 *      是没有的,因为匿名内部类语法结构中,没有留出位置给匿名子类构造器传参,所以它没有构造器
 *      有构造器也没用
 *      (这是匿名内部类和局部内部类不同的地方)
 *
 * @since 10:16
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 接口IA的匿名子类对象
        new IA() {
            // 匿名子类的类体
            int a;
            private int b;
            // static int c;
            // static {}
            static final int D = 20;


        };

        // 类A的匿名子类对象
        A a = new A(10, 20) {
        };
        System.out.println(a.num1);
        System.out.println(a.num2);

    }
}

class A {
    int num1;
    int num2;

    public A(int num1, int num2) {
        this.num1 = num1;
        this.num2 = num2;
    }
}

interface IA {
}
